/**
 * MIT License
 * 
 * Copyright (c) 2024 - present @ ebraid
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

#ifndef __EB_GPIO_PIN_H__
#define __EB_GPIO_PIN_H__


#define	      IO_PA0	                     0
#define	      IO_PA1	                     1
#define	      IO_PA2	                     2
#define	      IO_PA3	                     3
#define	      IO_PA4	                     4
#define	      IO_PA5	                     5
#define	      IO_PA6	                     6
#define	      IO_PA7	                     7
#define	      IO_PA8	                     8
#define	      IO_PA9	                     9
#define	      IO_PA10	                     10
#define	      IO_PA11	                     11
#define	      IO_PA12	                     12
#define	      IO_PA13	                     13
#define	      IO_PA14	                     14
#define	      IO_PA15	                     15
#define	      IO_PA16	                     16
#define	      IO_PA17	                     17
#define	      IO_PA18	                     18
#define	      IO_PA19	                     19
#define	      IO_PA20	                     20
#define	      IO_PA21	                     21
#define	      IO_PA22	                     22
#define	      IO_PA23	                     23
#define	      IO_PA24	                     24
#define	      IO_PA25	                     25
#define	      IO_PA26	                     26
#define	      IO_PA27	                     27
#define	      IO_PA28	                     28
#define	      IO_PA29	                     29
#define	      IO_PA30	                     30
#define	      IO_PA31	                     31
#define	      IO_PB0	                     32
#define	      IO_PB1	                     33
#define	      IO_PB2	                     34
#define	      IO_PB3	                     35
#define	      IO_PB4	                     36
#define	      IO_PB5	                     37
#define	      IO_PB6	                     38
#define	      IO_PB7	                     39
#define	      IO_PB8	                     40
#define	      IO_PB9	                     41
#define	      IO_PB10	                     42
#define	      IO_PB11	                     43
#define	      IO_PB12	                     44
#define	      IO_PB13	                     45
#define	      IO_PB14	                     46
#define	      IO_PB15	                     47
#define	      IO_PB16	                     48
#define	      IO_PB17	                     49
#define	      IO_PB18	                     50
#define	      IO_PB19	                     51
#define	      IO_PB20	                     52
#define	      IO_PB21	                     53
#define	      IO_PB22	                     54
#define	      IO_PB23	                     55
#define	      IO_PB24	                     56
#define	      IO_PB25	                     57
#define	      IO_PB26	                     58
#define	      IO_PB27	                     59
#define	      IO_PB28	                     60
#define	      IO_PB29	                     61
#define	      IO_PB30	                     62
#define	      IO_PB31	                     63
#define		  IO_PC0                         64                     
#define		  IO_PC1                         65
#define		  IO_PC2                         66
#define		  IO_PC3                         67
#define		  IO_PC4                         68
#define		  IO_PC5                         69
#define		  IO_PC6                         70
#define		  IO_PC7                         71
#define		  IO_PC8                         72
#define		  IO_PC9                         73
#define		  IO_PC10                        74
#define		  IO_PC11                        75
#define		  IO_PC12                        76
#define		  IO_PC13                        77
#define		  IO_PC14                        78
#define		  IO_PC15                        79
#define		  IO_PC16                        80
#define		  IO_PC17                        81
#define		  IO_PC18                        82
#define		  IO_PC19                        83
#define		  IO_PC20                        84
#define		  IO_PC21                        85
#define		  IO_PC22                        86
#define		  IO_PC23                        87
#define		  IO_PC24                        88
#define		  IO_PC25                        89
#define		  IO_PC26                        90
#define		  IO_PC27                        91
#define		  IO_PC28                        92
#define		  IO_PC29                        93
#define		  IO_PC30                        94
#define		  IO_PC31                        95
#define		  IO_PD0                         96
#define		  IO_PD1                         97
#define		  IO_PD2                         98
#define		  IO_PD3                         99
#define		  IO_PD4                         100
#define		  IO_PD5                         101
#define		  IO_PD6                         102
#define		  IO_PD7                         103
#define		  IO_PD8                         104
#define		  IO_PD9                         105
#define		  IO_PD10                        106
#define		  IO_PD11                        107
#define		  IO_PD12                        108
#define		  IO_PD13                        109
#define		  IO_PD14                        110
#define		  IO_PD15                        111
#define		  IO_PD16                        112
#define		  IO_PD17                        113
#define		  IO_PD18                        114
#define		  IO_PD19                        115
#define		  IO_PD20                        116
#define		  IO_PD21                        117
#define		  IO_PD22                        118
#define		  IO_PD23                        119
#define		  IO_PD24                        120
#define		  IO_PD25                        121
#define		  IO_PD26                        122
#define		  IO_PD27                        123
#define		  IO_PD28                        124
#define		  IO_PD29                        125
#define		  IO_PD30                        126
#define		  IO_PD31                        127
#define		  IO_PE0                         128
#define		  IO_PE1                         129
#define		  IO_PE2                         130
#define		  IO_PE3                         131
#define		  IO_PE4                         132
#define		  IO_PE5                         133
#define		  IO_PE6                         134
#define		  IO_PE7                         135
#define		  IO_PE8                         136
#define		  IO_PE9                         137
#define		  IO_PE10                        138
#define		  IO_PE11                        139
#define		  IO_PE12                        140
#define		  IO_PE13                        141
#define		  IO_PE14                        142
#define		  IO_PE15                        143
#define		  IO_PE16                        144
#define		  IO_PE17                        145
#define		  IO_PE18                        146
#define		  IO_PE19                        147
#define		  IO_PE20                        148
#define		  IO_PE21                        149
#define		  IO_PE22                        150
#define		  IO_PE23                        151
#define		  IO_PE24                        152
#define		  IO_PE25                        153
#define		  IO_PE26                        154
#define		  IO_PE27                        155
#define		  IO_PE28                        156
#define		  IO_PE29                        157
#define		  IO_PE30                        158
#define		  IO_PE31                        159
#define		  IO_PF0                         160
#define		  IO_PF1                         161
#define		  IO_PF2                         162
#define		  IO_PF3                         163
#define		  IO_PF4                         164
#define		  IO_PF5                         165
#define		  IO_PF6                         166
#define		  IO_PF7                         167
#define		  IO_PF8                         168
#define		  IO_PF9                         169
#define		  IO_PF10                        170
#define		  IO_PF11                        171
#define		  IO_PF12                        172
#define		  IO_PF13                        173
#define		  IO_PF14                        174
#define		  IO_PF15                        175
#define		  IO_PF16                        176
#define		  IO_PF17                        177
#define		  IO_PF18                        178
#define		  IO_PF19                        179
#define		  IO_PF20                        180
#define		  IO_PF21                        181
#define		  IO_PF22                        182
#define		  IO_PF23                        183
#define		  IO_PF24                        184
#define		  IO_PF25                        185
#define		  IO_PF26                        186
#define		  IO_PF27                        187
#define		  IO_PF28                        188
#define		  IO_PF29                        189
#define		  IO_PF30                        190
#define		  IO_PF31                        191
#define		  IO_PG0                         192
#define		  IO_PG1                         193
#define		  IO_PG2                         194
#define		  IO_PG3                         195
#define		  IO_PG4                         196
#define		  IO_PG5                         197
#define		  IO_PG6                         198
#define		  IO_PG7                         199
#define		  IO_PG8                         200
#define		  IO_PG9                         201
#define		  IO_PG10                        202
#define		  IO_PG11                        203
#define		  IO_PG12                        204
#define		  IO_PG13                        205
#define		  IO_PG14                        206
#define		  IO_PG15                        207
#define		  IO_PG16                        208
#define		  IO_PG17                        209
#define		  IO_PG18                        210
#define		  IO_PG19                        211
#define		  IO_PG20                        212
#define		  IO_PG21                        213
#define		  IO_PG22                        214
#define		  IO_PG23                        215
#define		  IO_PG24                        216
#define		  IO_PG25                        217
#define		  IO_PG26                        218
#define		  IO_PG27                        219
#define		  IO_PG28                        220
#define		  IO_PG29                        221
#define		  IO_PG30                        222
#define		  IO_PG31                        223
#define		  IO_PH0                         224
#define		  IO_PH1                         225
#define		  IO_PH2                         226
#define		  IO_PH3                         227
#define		  IO_PH4                         228
#define		  IO_PH5                         229
#define		  IO_PH6                         230
#define		  IO_PH7                         231
#define		  IO_PH8                         232
#define		  IO_PH9                         233
#define		  IO_PH10                        234
#define		  IO_PH11                        235
#define		  IO_PH12                        236
#define		  IO_PH13                        237
#define		  IO_PH14                        238
#define		  IO_PH15                        239
#define		  IO_PH16                        240
#define		  IO_PH17                        241
#define		  IO_PH18                        242
#define		  IO_PH19                        243
#define		  IO_PH20                        244
#define		  IO_PH21                        245
#define		  IO_PH22                        246
#define		  IO_PH23                        247
#define		  IO_PH24                        248
#define		  IO_PH25                        249
#define		  IO_PH26                        250
#define		  IO_PH27                        251
#define		  IO_PH28                        252
#define		  IO_PH29                        253
#define		  IO_PH30                        254
#define		  IO_PH31                        255
#define		  IO_PI0                         256
#define		  IO_PI1                         257
#define		  IO_PI2                         258
#define		  IO_PI3                         259
#define		  IO_PI4                         260
#define		  IO_PI5                         261
#define		  IO_PI6                         262
#define		  IO_PI7                         263
#define		  IO_PI8                         264
#define		  IO_PI9                         265
#define		  IO_PI10                        266
#define		  IO_PI11                        267
#define		  IO_PI12                        268
#define		  IO_PI13                        269
#define		  IO_PI14                        270
#define		  IO_PI15                        271
#define		  IO_PI16                        272
#define		  IO_PI17                        273
#define		  IO_PI18                        274
#define		  IO_PI19                        275
#define		  IO_PI20                        276
#define		  IO_PI21                        277
#define		  IO_PI22                        278
#define		  IO_PI23                        279
#define		  IO_PI24                        280
#define		  IO_PI25                        281
#define		  IO_PI26                        282
#define		  IO_PI27                        283
#define		  IO_PI28                        284
#define		  IO_PI29                        285
#define		  IO_PI30                        286
#define		  IO_PI31                        287
#define		  IO_PJ0                         288
#define		  IO_PJ1                         289
#define		  IO_PJ2                         290
#define		  IO_PJ3                         291
#define		  IO_PJ4                         292
#define		  IO_PJ5                         293
#define		  IO_PJ6                         294
#define		  IO_PJ7                         295
#define		  IO_PJ8                         296
#define		  IO_PJ9                         297
#define		  IO_PJ10                        298
#define		  IO_PJ11                        299
#define		  IO_PJ12                        300
#define		  IO_PJ13                        301
#define		  IO_PJ14                        302
#define		  IO_PJ15                        303
#define		  IO_PJ16                        304
#define		  IO_PJ17                        305
#define		  IO_PJ18                        306
#define		  IO_PJ19                        307
#define		  IO_PJ20                        308
#define		  IO_PJ21                        309
#define		  IO_PJ22                        310
#define		  IO_PJ23                        311
#define		  IO_PJ24                        312
#define		  IO_PJ25                        313
#define		  IO_PJ26                        314
#define		  IO_PJ27                        315
#define		  IO_PJ28                        316
#define		  IO_PJ29                        317
#define		  IO_PJ30                        318
#define		  IO_PJ31                        319
#define		  IO_PK0                         320
#define		  IO_PK1                         321
#define		  IO_PK2                         322
#define		  IO_PK3                         323
#define		  IO_PK4                         324
#define		  IO_PK5                         325
#define		  IO_PK6                         326
#define		  IO_PK7                         327
#define		  IO_PK8                         328
#define		  IO_PK9                         329
#define		  IO_PK10                        330
#define		  IO_PK11                        331
#define		  IO_PK12                        332
#define		  IO_PK13                        333
#define		  IO_PK14                        334
#define		  IO_PK15                        335
#define		  IO_PK16                        336
#define		  IO_PK17                        337
#define		  IO_PK18                        338
#define		  IO_PK19                        339
#define		  IO_PK20                        340
#define		  IO_PK21                        341
#define		  IO_PK22                        342
#define		  IO_PK23                        343
#define		  IO_PK24                        344
#define		  IO_PK25                        345
#define		  IO_PK26                        346
#define		  IO_PK27                        347
#define		  IO_PK28                        348
#define		  IO_PK29                        349
#define		  IO_PK30                        350
#define		  IO_PK31                        351


#define       IO_TO_PORT(x)                 ((x) >> 5)
#define       IO_TO_PIN(x)                  ((x) & 0x1F)


#define       IO_OUTPUT                     1
#define       IO_INPUT                      0

#define       IO_HIGH                       1
#define       IO_LOW                        0

#define       IO_PULLUP                     1
#define       IO_PULLDOWN                   0


#define       IO_INVALID_DIR                0xF
#define       IO_INVALID_VAL                0xF


#endif //!__EB_GPIO_PIN_H__
